" Highlight special characters (those which have a backslash) differently
syn match rcSpecial contained "\\[0-7][0-7][0-7]\=\|\\."
syn region rcString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=rcSpecial
syn match rcCharacter "'[^\\]'"
syn match rcSpecialCharacter "'\\.'"
syn match rcSpecialCharacter "'\\[0-7][0-7]'"
syn match rcSpecialCharacter "'\\[0-7][0-7][0-7]'"
"catch errors caused by wrong parenthesis
syn region rcParen transparent start='(' end=')' contains=ALLBUT,rcParenError,rcIncluded,rcSpecial,rcTodo
syn match rcParenError ")"
syn match rcInParen contained "[{}]"
"integer number, or floating point number without a dot and with "f".
syn case ignore
syn match rcNumber "\<\d\+\(u\=l\=\|lu\|f\)\>"
"floating point number, with dot, optional exponent
syn match rcFloat "\<\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\=\>"
"floating point number, starting with a dot, optional exponent
syn match rcFloat "\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>"
"floating point number, without dot, with exponent
syn match rcFloat "\<\d\+e[-+]\=\d\+[fl]\=\>"
"hex number
syn match rcNumber "\<0x[0-9a-f]\+\(u\=l\=\|lu\)\>"
"syn match rcIdentifier "\<[a-z_][a-z0-9_]*\>"
syn case match
" flag an octal number with wrong digits
syn match rcOctalError "\<0[0-7]*[89]"
if exists("rc_comment_strings")
" A comment can contain rcString, rcCharacter and rcNumber.
" But a "*/" inside a rcString in a rcComment DOES end the comment! So we
" need to use a special type of rcString: rcCommentString, which also ends on
" "*/", and sees a "*" at the start of the line as comment again.
" Unfortunately this doesn't very well work for // type of comments :-(
syntax match rcCommentSkip contained "^\s*\*\($\|\s\+\)"
syntax region rcCommentString contained start=+"+ skip=+\\\\\|\\"+ end=+"+ end=+\*/+me=s-1 contains=rcSpecial,rcCommentSkip
syntax region rcComment2String contained start=+"+ skip=+\\\\\|\\"+ end=+"+ end="$" contains=rcSpecial
syntax region rcComment start="/\*" end="\*/" contains=rcTodo,rcCommentString,rcCharacter,rcNumber,rcFloat
syntax match rcComment "//.*" contains=rcTodo,rcComment2String,rcCharacter,rcNumber
else
syn region rcComment start="/\*" end="\*/" contains=rcTodo
syn match rcComment "//.*" contains=rcTodo
endif
syntax match rcCommentError "\*/"
syn region rcPreCondit start="^\s*#\s*\(if\>\|ifdef\>\|ifndef\>\|elif\>\|else\>\|endif\>\)" skip="\\$" end="$" contains=rcComment,rcString,rcCharacter,rcNumber,rcCommentError
syn region rcIncluded contained start=+"+ skip=+\\\\\|\\"+ end=+"+
syn match rcIncluded contained "<[^>]*>"
syn match rcInclude "^\s*#\s*include\>\s*["<]" contains=rcIncluded
"syn match rcLineSkip "\\$"
syn region rcDefine start="^\s*#\s*\(define\>\|undef\>\)" skip="\\$" end="$" contains=ALLBUT,rcPreCondit,rcIncluded,rcInclude,rcDefine,rcInParen
syn region rcPreProc start="^\s*#\s*\(pragma\>\|line\>\|warning\>\|warn\>\|error\>\)" skip="\\$" end="$" contains=ALLBUT,rcPreCondit,rcIncluded,rcInclude,rcDefine,rcInParen
syn sync ccomment rcComment minlines=10
" Define the default highlighting.
" For version 5.7 and earlier: only when not done already
" For version 5.8 and later: only when an item doesn't have highlighting yet
if version >= 508 || !exists("did_rc_syntax_inits")
if version < 508
let did_rc_syntax_inits = 1
command -nargs=+ HiLink hi link <args>
else
command -nargs=+ HiLink hi def link <args>
endif
HiLink rcCharacter Character
HiLink rcSpecialCharacter rcSpecial
HiLink rcNumber Number
HiLink rcFloat Float
HiLink rcOctalError rcError
HiLink rcParenError rcError
HiLink rcInParen rcError
HiLink rcCommentError rcError
HiLink rcInclude Include
HiLink rcPreProc PreProc
HiLink rcDefine Macro
HiLink rcIncluded rcString
HiLink rcError Error
HiLink rcPreCondit PreCondit
HiLink rcCommentString rcString
HiLink rcComment2String rcString
HiLink rcCommentSkip rcComment
HiLink rcString String
HiLink rcComment Comment
HiLink rcSpecial SpecialChar
HiLink rcTodo Todo
HiLink rcAttribute rcCommonAttribute
HiLink rcStdId rcStatement
HiLink rcStatement Statement
" Default color overrides
hi def rcLanguage term=reverse ctermbg=Red ctermfg=Yellow guibg=Red guifg=Yellow
hi def rcMainObject term=underline ctermfg=Blue guifg=Blue
hi def rcSubObject ctermfg=Green guifg=Green
hi def rcCaptionParam term=underline ctermfg=DarkGreen guifg=Green
hi def rcParam ctermfg=DarkGreen guifg=DarkGreen
hi def rcStatement ctermfg=DarkGreen guifg=DarkGreen
hi def rcCommonAttribute ctermfg=Brown guifg=Brown